home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok72.lha / Env / Env.mod < prev    next >
Text File  |  1993-08-15  |  4KB  |  139 lines

  1. (*************************************************************************
  2.  
  3. :Program.    Env.mod
  4. :Contents.   Shows contents of local and global dos environment variables
  5. :Author.     Hartmut Goebel [hG]
  6. :Address.    Aufseßplatz 5, D-8500 Nürnberg 40
  7. :Copyright.  Public Domain
  8. :Language.   Oberon
  9. :Translator. Amiga Oberon V2.25
  10. :History.    V1.0, 28 Oct 1991 [hG]
  11. :History.    V1.1, 24 Feb 1992 [hG] ^Output: contents now always at col 21
  12. :History.    V1.2, 05 Mar 1992 [hG] +template, LocalVars, Flags
  13. :History.    V1.3, 12 Apr 1992 [hG] ^flags now always 4-stellig +len
  14.                                     ·changed template +version string
  15. :Date.       12 Apr 1992 14:25:38
  16.  
  17. :Remark.     needs AmigaDos 2.0
  18. :Usage.      env lo=locals/S, go=globals/S, flags/S, len/S
  19.  
  20. *************************************************************************)
  21.  
  22. MODULE Env;
  23.  
  24. IMPORT
  25.   asc: ASCII,
  26.   d: Dos,
  27.   e: Exec,
  28.   (*lst: Lists,*)
  29.   ol: OberonLib,
  30.   s: SYSTEM;
  31.   (*slst: SortedLists;*)
  32.  
  33. CONST
  34.  
  35.   need20 = "I need at least AmigaDos 2.0\n";
  36.   Version = "$VER: env V1.3 (12 Apr 1992) [hG]";
  37.  
  38.   Template = "LO=LOCALS/S,"
  39.              "GO=GLOBALS/S,"
  40.              "FLAGS/S,"
  41.              "LEN/S";
  42.  
  43.   numArguments = 4;
  44.  
  45.   argLocals = 0;
  46.   argGlobals = 1;
  47.   argFlags = 2;
  48.   argLen = 3;
  49.  
  50. TYPE
  51.   EnvVarPtr = POINTER TO EnvVar;
  52.   EnvVar = RECORD (*(lst.List)*)
  53.     name: ARRAY 30 OF CHAR;
  54.     contents: e.STRING;
  55.   END;
  56.  
  57.   ARGV = ARRAY numArguments OF LONGINT;
  58.  
  59. VAR
  60.   FileInfo: d.FileInfoBlock;
  61.   Lock: d.FileLockPtr;
  62.   Env: EnvVar(*Ptr*);
  63.   Var: d.LocalVarPtr;
  64.   Me: d.ProcessPtr;
  65.   Arguments: d.RDArgsPtr;
  66.   Argv: ARGV;
  67.   b, Sort: BOOLEAN;
  68.  
  69. BEGIN
  70.   IF ol.wbStarted THEN HALT(20); END;
  71.   IF d.dos.lib.version < 36 THEN
  72.     IF d.Write(d.Output(),need20,SIZE(need20)) = 0 THEN END;
  73.     HALT(20);
  74.   END;
  75.   Me := s.ADR(Version); (* !!dummy!! *)
  76.   Me := s.VAL(d.ProcessPtr,ol.Me);
  77.  
  78.   Arguments := d.ReadArgs(Template,Argv,NIL);
  79.   IF Arguments = NIL THEN
  80.     IF d.PrintFault(d.IoErr(),"env:") THEN END;
  81.     HALT(20);
  82.   END;
  83.  
  84.   (* No type specified -> show both
  85.    *)
  86.   IF (Argv[argLocals] = d.DOSFALSE) & (Argv[argGlobals] = d.DOSFALSE) THEN
  87.     Argv[argLocals] := d.DOSTRUE;
  88.     Argv[argGlobals] := d.DOSTRUE;
  89.   END;
  90.  
  91.   IF Argv[argLocals] = d.DOSTRUE THEN
  92.     Var := s.VAL(d.LocalVarPtr,Me.localVars.head);
  93.     WHILE Var.node.succ # NIL DO
  94.        IF Var.node.type = 0 THEN
  95.          IF Argv[argLen] = d.DOSTRUE THEN
  96.            d.PrintF("%3.3ld ",Var.len);
  97.          END;
  98.          IF Argv[argFlags] = d.DOSTRUE THEN
  99.            d.PrintF("%04.4lx ",s.VAL(INTEGER,Var.flags));
  100.          END;
  101.          d.PrintF("%-20.20s %s\n",Var.node.name,Var.value);
  102.          (*IF d.WriteChars(Var.value^,Var.len) = 0 THEN END;
  103.          IF d.PutStr("\n") = 0 THEN END;*)
  104.        END;
  105.        Var := Var.node.succ;
  106.     END;
  107.   END;
  108.  
  109.   IF (Argv[argGlobals] = d.DOSTRUE) & (Argv[argLocals] = d.DOSTRUE) THEN
  110.     IF d.PutStr("\n") = 0 THEN END;
  111.   END;
  112.  
  113.   IF Argv[argGlobals] = d.DOSTRUE THEN
  114.     Lock := d.Lock("ENV:",d.sharedLock);
  115.     IF Lock = NIL THEN
  116.       HALT(20); END;
  117.     (*NEW(Env);*)
  118.     b := d.Examine(Lock,FileInfo);
  119.     REPEAT
  120.       b := d.ExNext(Lock,FileInfo);
  121.       IF b & (FileInfo.dirEntryType < 0) THEN
  122.         (*
  123.         IF Sort THEN
  124.           IF d.GetVar(FileInfo.fileName,Env.contents,
  125.                       s.SIZE(e.STRING),LONGSET{d.globalOnly}) > 0 THEN
  126.             Env.name := FielInfo.fileName^;
  127.             NEW(Env);
  128.           END;
  129.         ELS*)
  130.         IF d.GetVar(FileInfo.fileName,Env.contents,
  131.                       s.SIZE(e.STRING),LONGSET{d.globalOnly}) > 0 THEN
  132.           d.PrintF("%-20.20s %s\n",s.ADR(FileInfo.fileName),s.ADR(Env.contents));
  133.         END;
  134.       END;
  135.     UNTIL (~b) & (d.IoErr() = d.noMoreEntries);
  136.   END;
  137. END Env.
  138.  
  139.